package com.munhrasoft.dinamica.business.logic;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.munhrasoft.dinamica.business.entities.GroupEntity;
import com.munhrasoft.dinamica.business.entities.UserEntity;

@Stateless
public class GrupoUsuarioEJB {

    @EJB
    private UsuarioEJB    usuarioEJB;

    @PersistenceContext(unitName = "dinamicaPU")
    private EntityManager em;

    @SuppressWarnings("unchecked")
    public List<GroupEntity> fetchAllGrupoUsuarios() {
        Query query = em.createNamedQuery("findAllGroupEntity");
        return query.getResultList();
    }

    /**
     * Este metodo vai carregar os grupos de usuarios padrao do sistema e vai adicionar a estes
     * grupos um usuario
     */

    public void CarregaGrupoPadrao() {

        GroupEntity grupo1 = new GroupEntity();
        grupo1.setItsName("administradores");

        GroupEntity grupo2 = new GroupEntity();
        grupo2.setItsName("funcionarios");

        UserEntity usuario1 = new UserEntity();
        usuario1.setItsName("admin");
        usuario1.setItsPassword("1234");

        UserEntity usuario2 = new UserEntity();
        usuario2.setItsName("func");
        usuario2.setItsPassword("1234");

        createGrupoUsuario(grupo1);
        createGrupoUsuario(grupo2);

        usuario1 = usuarioEJB.createUsuario(usuario1);
        usuario1.setItsGroupEntity(grupo1);
        usuarioEJB.updateUsuario(usuario1);

        usuario2 = usuarioEJB.createUsuario(usuario2);
        usuario2.setItsGroupEntity(grupo2);
        usuarioEJB.updateUsuario(usuario2);
    }

    public GroupEntity createGrupoUsuario(GroupEntity grupoUsuario) {
        em.persist(grupoUsuario);
        return grupoUsuario;
    }

    public GroupEntity updateGrupoUsuario(GroupEntity grupoUsuario) {
        return em.merge(grupoUsuario);
    }

    public void removeGrupoUsuario(GroupEntity grupoUsuario) {
        // TODO vai precisar de fazer alguma validacao, pq se tiver
        // usuario pindurado pode dar pau
        em.remove(em.merge(grupoUsuario));
    }

}
